package com.qdlc.p2p.dal.mybatis.model.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.qdlc.p2p.dal.dto.Account;
import com.qdlc.p2p.dal.model.AccountModel;

/**
 * 用户资金账户表操作
 *
 * @author Kaiju Zhao
 * @date 2016-03-04
 * @version 1.1.0.0
 */
public interface AccountMapper {

	/**
	 * 新增用户资金账户信息
	 *
	 * @author Kaiju Zhao
	 * @param account
	 */
	void insert(Account account);

	/**
	 * 修改用户资金账户信息
	 *
	 * @author Kaiju Zhao
	 * @param account
	 */
	 int update(Account account);

	/**
	 * 更新总金额和可用金额
	 *
	 * @param account
	 * @author Kaiju Zhao
	 */
	void updateTotalAndUseMoney(Account account);

	/**
	 * 更新总金额和冻结金额
	 *
	 * @param account
	 * @author Kaiju Zhao
	 */
	void updateTotalAndNoUseMoney(Account account);

	/**
	 * 更新可用金额和冻结金额
	 *
	 * @param account
	 * @author Kaiju Zhao
	 */
	void updateUseMoneyAndNoUseMoney(Account account);

	/**
	 * 更新总金额和代收金额
	 *
	 * @param account
	 * @author Kaiju Zhao
	 */
	void updateTotalAndCollection(Account account);

	/**
	 * 更新可用金额和代收金额
	 *
	 * @param account
	 * @author Kaiju Zhao
	 */
	void updateUseMoneyAndCollection(Account account);

	/**
	 * 更新冻结金额和代收金额
	 *
	 * @param account
	 * @author Kaiju Zhao
	 */
	void updateNoUseMoneyAndCollection(Account account);

	/**
	 * 更新用户资金账户的新浪收益
	 *
	 * @author Kaiju Zhao
	 * @param accountId
	 * @param yesterdayBonus
	 * @param totalBonus
	 * @return
	 */
	int updateSinaProfit(@Param("accountId")long accountId, @Param("yesterdayBonus") double yesterdayBonus, @Param("totalBonus")double totalBonus);

	/**
	 * 根据id查询用户资金账户信息
	 *
	 * @author Kaiju Zhao
	 * @param id
	 * @return
	 */
	Account findById(long id);

	/**
	 * 查询用户资金账户信息(加有悲观锁，防止并发问题)
	 *
	 * @author Kaiju Zhao
	 * @param userId
	 * @return
	 */
	Account findByUserId(long userId);

	/**
	 * 查询用户资金账户信息列表
	 *
	 * @author Kaiju Zhao
	 * @param model
	 * @return
	 */
	List<AccountModel> list(AccountModel model);

	/**
	 * 获取用户可用金额
	 *
	 * @author Kaiju Zhao
	 * @param userId
	 * @return
	 */
	double findUseMoneyByUserId(long userId);

	/**
	 * 获取所有可用金额
	 *
	 * @author Kaiju Zhao
	 * @return
	 */
	double sumAllUseMoney();

	/**
	 * 获取所有可用金额 排除借款人
	 *
	 * @author hongbinglin
	 * @return
	 */
	double sumUseMoney();
}